{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 用RNN进行时间序列预测\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "%matplotlib inline\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "t_min, t_max = 0, 30\n",
    "resolution = 0.1\n",
    "\n",
    "def time_series(t):\n",
    "    return t * np.sin(t) / 3 + 2 * np.sin(t*5)\n",
    "\n",
    "def next_batch(batch_size, n_steps):\n",
    "    t0 = np.random.rand(batch_size, 1) * (t_max - t_min - n_steps * resolution)\n",
    "    Ts = t0 + np.arange(0., n_steps + 1) * resolution\n",
    "    ys = time_series(Ts)\n",
    "    return ys[:, :-1].reshape(-1, n_steps, 1), ys[:, 1:].reshape(-1, n_steps, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Mk0QFRLILcO7U1ltuG5QAiGB5/Vr6ZHiI4M5VVpJaYU+MVFKKVdwS02oMWY34CwpnAi8bowpAw6KyH5gKPDl+Xze+T6KVMpbteTP/h2jepJXWMasy3u02Ht6EvuA9Xmny+jSPszN0SillO/ztOwsEThSYz3bVnYOEZktIltEZEteXp5LglOqLYsKCeSZXw/igljf6hlvF+cYsF47JymllCu0Wk2oiKwHOjnZ9KAx5p3zfX9jzPPA8wBpaWnmfN9PKdW22Qes//GUDtOklFKu0GpJqDFmTDMOOwp0qbGeZCtTSqlWlRAdCkCObXpSpZRSrcvTHsevBm4UkWARuQC4EPjazTEppdqAmLBAwoP8OapJqFJKuYRbklARuUFEsoHLgDUi8gGAMeY74F/ALmAdcIcxRruqtoCZM2dy7bXXNvm4EydO0LFjR7Kysurdb/LkyTz99NPNDc/rtPb1bEhbu96uICIktgsl+4QmoUop5QpuSUKNMauMMUnGmGBjTEdjzNga2x41xiQbY3obY9a6Iz5Pct999zF27NiGd2zAkiVLeOWVV5p83GOPPcY111xD8lnz4J0d1+9//3seffRRTp486fR95syZw1133cVzzz1HamoqUVFRREVFcdlll7FmzZomx9WQxx9/nCFDhhAVFUVcXBwTJkxg586dLfb+LXU9Fy1ahIjUWjp1OrcpdVOvt2qexJhQjmoSqpRSLuFpj+PVWb7++muGDh163u8THR1NTExMk44pLi5m2bJlzJo1q8G4BgwYQI8ePZwmZsYYVq9ezfXXX09SUhJPPPEEW7duZcuWLYwaNYrrr7+e7du3NyqmmTNnsmjRogb3y8jIYO7cuWzatIlPPvmEgIAAxowZw88//9yoz2lIS17P3r17k5ub61h27NhxzrFNud6q+ZLahenjeKWUchFNQj1UeXk5QUFBbNiwgUceeQQRISUlpd5jNmzYwKWXXkpERATR0dEMHTrUUft39uPjESNGMHfuXB544AFiY2OJj48nPT2d6upqxz7vv/8+IsLw4cMbFdd1113Ha6+9dk5c33zzDWVlZVx++eVMnDiRcePG0bNnT3r16sWjjz5KZGQkX355XkPBnuODDz7glltuoX///gwYMICXX36ZvLw8vvjii0a/hyuuJ0BAQACdOnVyLHFxcY5tzbneqvkS24VysqSC06UV7g5FKaV8ns/PHe/MQ+9+x66cUy79zJSEKP4woV+j9w8ICODLL78kLS2Nr776iq5duxIcHFzn/pWVlUycOJFZs2bx6quvUlFRwdatW/H3r3tmm1dffZV58+axadMmtm3bxk033cTgwYOZOnUqAJ9//jmDBw+uNalAfXENHTqURx55hJKSEkJDQx3HvP3224wfP56AgNo/blVVVfz73/+msLCQYcOGNfraNMfp06eprq6mXbt2jdrfVdcT4MCBAyQkJBAcHMwll1zCY489Ro8e1oDwzbneqvkSY6zreLSghA7h1Q3srZRS6ny0ySTUG/j5+ZGbm0tkZCRDhgxpcMrRU6dOUVBQwIQJExztDfv06VPvMSkpKfzv//4vAL169eKFF17g448/diRNhw8fJiEhodFxJSQkUFFRQU5OTq02pO+88w4PP/ywY33Hjh1cdtlllJaWEhERwapVqxgwYEAjrkrzzZs3j0GDBnHZZZc1an9XXc9LLrmEl156iT59+nD8+HEeeeQRhg0bxnfffUeHDh2adb1V83XrYM2UdDCviE37dR55pZRqTW0yCW1KjaQ7ffvttwwcOLBRc963b9+emTNnQaBPswAAGgNJREFUMnbsWEaPHs3o0aOZNGkSXbt2rfOY1NTUWusJCQkcP37csV5SUkLHjh0bHZe9Nq6k5Eybuv3793PgwIFanWp69+7Ntm3bOHnyJCtXrmTGjBlkZGTQv3//cz7rscce47HHHnOsl5WVISIsXrzYUbZ27Vp+8Ytf1Hme99xzDxs3bmTjxo311mTW5KrrOW7cuFrrl156KT169GDFihXcc889QNOutzo/vTtFEuTvx7YjBWR7UdtQEXkKmACUA1nALcaYAvdG1TRZWfD007B6Nfz5z/Df/w3XXQf33gv6P5ZSvknbhHqwbdu2cdFFFzV6/+XLl/PVV19xxRVXsHr1anr37s0HH3xQ5/6BgYG11kWkVhvG2NhYTpw40ei47J1+arZpfPvttxk9ejTh4WemegwKCqJnz54MHjyYxx9/nEGDBvHss886jXHOnDls27bNsVx33XXnlKWlpdV5jnfffTevvfYan3zyieMRd2O56nrWFBERQb9+/fj+++8dZU253ur8BAf40y8xim9/KGDr4fq/Vx7mI6C/MSYV2AcsdHM8TbJ2LaSmwrJlMHIk3HADjBhhraemWtuVUr5Hk1APlpmZeU7tWkMGDhzI/PnzycjIYMSIEaxYsaLZn3/RRRexa9euRse1c+dOEhMTa9X2vfPOO1x//fX1fk51dTVlZc6nSmzfvj09e/Z0LJGRkeeU1dUect68eY4EtKFH6XVxxfWsqbS0lD179tC5c2dHWVOutzp/F3Vpx9eHfib3pPfMIW+M+dAYU2lb3Yw125xXyMqCSZOguBgqKuDWW63yW2+11ouLre3nObSuUsoDaRLqwSorK9mzZw85OTkUFFhP1pYuXeo0oTp48CALFixg06ZNHD58mE8//ZTt27c32KO+PmPHjmX37t389FPttnHO4gKr403Nx+55eXls3ryZCRMmOMoWLFjA559/zqFDh9ixYwcLFy4kIyODadOmNTtOZ+644w6WL1/OP//5T9q1a8exY8c4duwYhYWFjn3qupbguuuZnp7OZ599xsGDB/nqq6+YNGkSRUVFzJgxw7FPY6+3ahlp3RvXec2D3Qp4Td1heTkUFYEx1mLvozh8+JmyoiIrIVVK+RZNQj3Yo48+yuuvv05SUhILF1pP1/Lz89m7d+85+4aFhbFv3z4mT55Mr169mDFjBtOmTWP+/PnN/vwBAwYwdOhQXn/99QbjKi0tZdWqVdx2222O/d59912GDBlSq6bu2LFj3HzzzfTu3ZvRo0fzzTffsHbt2nPaRp6vv/zlL5w+fZrRo0fTuXNnx1KzLWld1xJcdz2zs7OZOnUqvXv35le/+hXBwcFs3ryZbt26OfZp7PVWLeOqlI4suXEQf57a+KYwriAi60Vkp5NlYo19HgQqgVfreZ/ZIrJFRLbk5eW5IvR6padbSaadfRCQmoOBFBVZbUOVUr5FjDHujuG8paWlmS1btjjdtnv3bvr27eviiHzHunXrmDdvHrt27aq3U89zzz3HO++8w4cffugomzhxIsOHD+f+++93RaheobHXsyHOrndd9Heg+UTkP8aYuhsdexARmQncDow2xhQ35pj67p2u4ucHV14J770HNZqOOxQVwfjx8PnnUKWTOCvlFRp779SaUFWvq6++mjvuuIPs7Ox69wsMDOTPf/5zrbLhw4c7hidSlsZez4Y4u96q7RKRq4H7gesam4B6iogIyMiAKVPg7IEeSkqs8s8+s/ZTSvmWNjlEk2qa3/72tw3uM3v27HPKtAbUucZcz4Y4u96qTVsKBAMf2Yby2myMmePekBrn5putXvAxMVBZaS3l5RAUZH0dEwOBgTB9ursjVUq1NK0JVUopL2eM6WmM6WKMGWRbvCIBBautZ2AgzJoFYWGwfTtMnGi9hoVZveQDA+Huu90dqVKqpWkSqpRSym2Sk2HlSigshPnzIS0N1q+HIUNgwQKrTejKlTpgvVK+SJNQpZRSbjVuHKSkQGkpREZanZUiIqw2oSkp1nallO/RNqFKKaXcLjkZli61FqVU26A1oUoppZRSyuU0CVVKKaWUUi6nSahSSimllHI5TUJVvWbOnMm1117bpGNGjBjBnXfe2UoRnbFo0SL69+/f6p+jlFJKqZanSaiH27p1K/7+/gwfPrxR+zcnaazPkiVLeOWVV5p0zFtvvcXjjz/eYjHUJT09nc8++6zF3u+ll14iQqdlUUoppVxCk1APt2zZMubOncvOnTvZvXt3i71vRUVFo/aLjo4mJiamSe/dvn17IiMjmxNWk0RERNChQ4dW/xyllFJKtTxNQj1YSUkJ//znP5k9ezaTJk3ixRdfrHf/RYsWsWLFCtasWYOIICJkZGRw6NAhRITXXnuNUaNGERoayv/93//x008/MXXqVJKSkggNDaVfv34sX7681nueXbM6YsQI5s6dywMPPEBsbCzx8fGkp6dTXV1da5+aj+O7d+/OI488wu23305UVBRJSUk89dRTtT5n3759XHnllYSEhNC7d2/ef/99IiIieOmll+o935qP4+2xLlmyhMTERNq1a8ctt9xCcfGZqbQ3bNjApZdeSkREBNHR0QwdOpSdO3eSkZHBLbfcQlFRkePaLVq0CIBXXnmFIUOGEBkZSXx8PJMnT+bo0aOO98zIyEBE+Pjjj7nkkksICwsjLS2NrVu31op38+bNjBo1ivDwcKKjoxk1ahQ5OTkAGGN48sknSU5OJjQ0lAEDBjS5BlopT5GVBXPnQlISrFplvc6da5UrpZRdm0xCRdy3NMXKlSvp1q0bAwYMYPr06fzjH/+otwYzPT2dX//614wZM4bc3Fxyc3MZNmyYY/vChQuZO3cuu3bt4vrrr6e0tJSLL76Y9957j++++4558+Zx++238/HHH9cb16uvvkpAQACbNm1i6dKl/OlPf+KNN96o95hnn32WAQMGsHXrVubPn8/999/Pl19+CUB1dTU33HADAQEBbN68mZdeeomHHnqIsrKy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\n",
      "text/plain": [
       "<Figure size 792x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "t = np.linspace(t_min, t_max, int((t_max - t_min) / resolution))\n",
    "\n",
    "n_steps = 20\n",
    "t_instance = np.linspace(12.2, 12.2 + resolution * (n_steps + 1), n_steps + 1)\n",
    "\n",
    "plt.figure(figsize=(11,4))\n",
    "plt.subplot(121)\n",
    "plt.title(\"A time series (generated)\", fontsize=14)\n",
    "plt.plot(t, time_series(t), label=r\"$t . \\sin(t) / 3 + 2 . \\sin(5t)$\")\n",
    "plt.plot(t_instance[:-1], time_series(t_instance[:-1]), \"b-\", linewidth=3, label=\"A training instance\")\n",
    "plt.legend(loc=\"lower left\", fontsize=14)\n",
    "plt.axis([0, 30, -17, 13])\n",
    "plt.xlabel(\"Time\")\n",
    "plt.ylabel(\"Value\")\n",
    "\n",
    "plt.subplot(122)\n",
    "plt.title(\"A training instance\", fontsize=14)\n",
    "plt.plot(t_instance[:-1], time_series(t_instance[:-1]), \"bo\", markersize=10, label=\"instance\")\n",
    "plt.plot(t_instance[1:], time_series(t_instance[1:]), \"w*\", markersize=10, label=\"target\")\n",
    "plt.legend(loc=\"upper left\")\n",
    "plt.xlabel(\"Time\")\n",
    "\n",
    " \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 使用OutputProjectionWrapper"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "tf.reset_default_graph()\n",
    "\n",
    "n_steps = 20\n",
    "n_inputs = 1\n",
    "n_neurons = 100\n",
    "n_outputs = 1\n",
    "\n",
    "X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])\n",
    "y = tf.placeholder(tf.float32, [None, n_steps, n_outputs])\n",
    "\n",
    "cell = tf.nn.rnn_cell.BasicRNNCell(num_units=n_neurons, activation=tf.nn.relu)\n",
    "cell = tf.contrib.rnn.OutputProjectionWrapper(cell,\n",
    "                                              output_size=n_outputs)\n",
    "outputs, states = tf.nn.dynamic_rnn(cell, X, dtype=tf.float32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 \tMSE: 19.772085\n",
      "100 \tMSE: 0.4531196\n",
      "200 \tMSE: 0.15698436\n",
      "300 \tMSE: 0.05528699\n",
      "400 \tMSE: 0.05178514\n",
      "500 \tMSE: 0.047824007\n",
      "600 \tMSE: 0.04897178\n",
      "700 \tMSE: 0.04987259\n",
      "800 \tMSE: 0.050523166\n",
      "900 \tMSE: 0.05551938\n",
      "1000 \tMSE: 0.042918667\n",
      "1100 \tMSE: 0.043405924\n",
      "1200 \tMSE: 0.050719943\n",
      "1300 \tMSE: 0.04084601\n",
      "1400 \tMSE: 0.04659339\n"
     ]
    }
   ],
   "source": [
    "learning_rate = 0.001\n",
    "\n",
    "loss = tf.reduce_mean(tf.square(outputs - y))  # MSE\n",
    "optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)\n",
    "training_op = optimizer.minimize(loss)\n",
    "\n",
    "init = tf.global_variables_initializer()\n",
    "\n",
    "n_iterations = 1500\n",
    "batch_size = 50\n",
    "saver = tf.train.Saver()\n",
    "with tf.Session() as sess:\n",
    "    init.run()\n",
    "    for iteration in range(n_iterations):\n",
    "        X_batch, y_batch = next_batch(batch_size, n_steps)\n",
    "        sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
    "        if iteration % 100 == 0:\n",
    "            mse = loss.eval(feed_dict={X: X_batch, y: y_batch})\n",
    "            print(iteration, \"\\tMSE:\", mse)\n",
    "    saver.save(sess, \"/tmp/time-series-data\") "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from /tmp/time-series-data\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess: \n",
    "    saver.restore(sess, \"/tmp/time-series-data\")\n",
    "    X_new = time_series(np.array(t_instance[:-1].reshape(-1, n_steps, n_inputs)))\n",
    "    y_pred = sess.run(outputs, feed_dict={X: X_new})\n",
    "\n",
    "plt.title(\"Testing the model\", fontsize=14)\n",
    "plt.plot(t_instance[:-1], time_series(t_instance[:-1]), \"bo\", markersize=10, label=\"instance\")\n",
    "plt.plot(t_instance[1:], time_series(t_instance[1:]), \"w*\", markersize=10, label=\"target\")\n",
    "plt.plot(t_instance[1:], y_pred[0,:,0], \"r.\", markersize=10, label=\"prediction\")\n",
    "plt.legend(loc=\"upper left\")\n",
    "plt.xlabel(\"Time\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 不使用OutputProjectionWrapper"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 \tMSE: 15.29193\n",
      "100 \tMSE: 0.47308847\n",
      "200 \tMSE: 0.17360653\n",
      "300 \tMSE: 0.089769855\n",
      "400 \tMSE: 0.054078393\n",
      "500 \tMSE: 0.05357524\n",
      "600 \tMSE: 0.0484104\n",
      "700 \tMSE: 0.06316046\n",
      "800 \tMSE: 0.043871228\n",
      "900 \tMSE: 0.044292577\n",
      "1000 \tMSE: 0.041127943\n",
      "1100 \tMSE: 0.04910887\n",
      "1200 \tMSE: 0.042817377\n",
      "1300 \tMSE: 0.037098035\n",
      "1400 \tMSE: 0.045980886\n"
     ]
    }
   ],
   "source": [
    "tf.reset_default_graph()\n",
    "\n",
    "n_steps = 20\n",
    "n_inputs = 1\n",
    "n_neurons = 100\n",
    "n_outputs = 1\n",
    "\n",
    "X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])\n",
    "y = tf.placeholder(tf.float32, [None, n_steps, n_outputs])\n",
    "\n",
    "cell = tf.nn.rnn_cell.BasicRNNCell(num_units=n_neurons, activation=tf.nn.relu) \n",
    "outputs, states = tf.nn.dynamic_rnn(cell, X, dtype=tf.float32)\n",
    "\n",
    "stacked_rnn_outputs = tf.reshape(outputs, [-1, n_neurons])\n",
    "stacked_outputs = tf.layers.dense(stacked_rnn_outputs, n_outputs)\n",
    "outputs = tf.reshape(stacked_outputs, [-1, n_steps, n_outputs])\n",
    "\n",
    "learning_rate = 0.001\n",
    "\n",
    "loss = tf.reduce_mean(tf.square(outputs - y))  # MSE\n",
    "optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)\n",
    "training_op = optimizer.minimize(loss)\n",
    "\n",
    "init = tf.global_variables_initializer()\n",
    "\n",
    "n_iterations = 1500\n",
    "batch_size = 50\n",
    "saver = tf.train.Saver()\n",
    "with tf.Session() as sess:\n",
    "    init.run()\n",
    "    for iteration in range(n_iterations):\n",
    "        X_batch, y_batch = next_batch(batch_size, n_steps)\n",
    "        sess.run(training_op, feed_dict={X: X_batch, y: y_batch})\n",
    "        if iteration % 100 == 0:\n",
    "            mse = loss.eval(feed_dict={X: X_batch, y: y_batch})\n",
    "            print(iteration, \"\\tMSE:\", mse)\n",
    "    saver.save(sess, \"/tmp/time-series-data\") "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 生成新的序列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from /tmp/time-series-data\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:                      \n",
    "    saver.restore(sess, \"/tmp/time-series-data\")\n",
    "\n",
    "    sequence = [0.] * n_steps\n",
    "    for iteration in range(300):\n",
    "        X_batch = np.array(sequence[-n_steps:]).reshape(1, n_steps, 1)\n",
    "        y_pred = sess.run(outputs, feed_dict={X: X_batch})\n",
    "        sequence.append(y_pred[0, -1, 0])\n",
    "        \n",
    "        \n",
    "plt.figure(figsize=(8,4))\n",
    "plt.plot(np.arange(len(sequence)), sequence, \"b-\")\n",
    "plt.plot(t[:n_steps], sequence[:n_steps], \"b-\", linewidth=3)\n",
    "plt.xlabel(\"Time\")\n",
    "plt.ylabel(\"Value\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from /tmp/time-series-data\n"
     ]
    },
    {
     "data": {
      "image/png": "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A/AzY8x+/0aaOlLhvTPI75sA3zsTje+diZfs9860DZtERERE5L90nUYnIiIiogBg2CQiIiIizzBsEhEREZFnGDaJiIiIyDMMm0RERETkmTrVP4XIfyLSEsAHoZvtABwGsC10+wdjzEhfBkZEFGB876QgYOsjSjki8gcAu40xD/o9FiKiVMH3TvILp9Ep5YnI7tD1GBH5RETeFpHVIvIXEfmpiHwjIgtFpCD0vNYi8rqIzAldjvf3T0BElHx876RkYdikdDMQwDUAegO4BEBPY8wwAE8BuD70nIcBPGSMORbA+aHHiIgyGd87yTNcs0npZo49BkxEVgGYEbp/IYCxoY9PAdBHj7EFAOSISBNjzO6kjpSIKDj43kmeYdikdOM8w/WI4/YRhP+9ZwEYbozZl8yBEREFGN87yTOcRqdMNAPhaSGIyCAfx0JElCr43km1wrBJmegGAIUiskBElkDXKRERUWx876RaYesjIiIiIvIMK5tERERE5BmGTSIiIiLyDMMmEREREXmGYZOIiIiIPMOwSURERESeYdgkIiIiIs8wbBIRERGRZxg2iYiIiMgz/x9I/pntkfDpSgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 792x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    saver.restore(sess, \"/tmp/time-series-data\")\n",
    "\n",
    "    sequence1 = [0. for i in range(n_steps)]\n",
    "    for iteration in range(len(t) - n_steps):\n",
    "        X_batch = np.array(sequence1[-n_steps:]).reshape(1, n_steps, 1)\n",
    "        y_pred = sess.run(outputs, feed_dict={X: X_batch})\n",
    "        sequence1.append(y_pred[0, -1, 0])\n",
    "\n",
    "    sequence2 = [time_series(i * resolution + t_min + (t_max-t_min/3)) for i in range(n_steps)]\n",
    "    for iteration in range(len(t) - n_steps):\n",
    "        X_batch = np.array(sequence2[-n_steps:]).reshape(1, n_steps, 1)\n",
    "        y_pred = sess.run(outputs, feed_dict={X: X_batch})\n",
    "        sequence2.append(y_pred[0, -1, 0])\n",
    "\n",
    "plt.figure(figsize=(11,4))\n",
    "plt.subplot(121)\n",
    "plt.plot(t, sequence1, \"b-\")\n",
    "plt.plot(t[:n_steps], sequence1[:n_steps], \"b-\", linewidth=3)\n",
    "plt.xlabel(\"Time\")\n",
    "plt.ylabel(\"Value\")\n",
    "\n",
    "plt.subplot(122)\n",
    "plt.plot(t, sequence2, \"b-\")\n",
    "plt.plot(t[:n_steps], sequence2[:n_steps], \"b-\", linewidth=3)\n",
    "plt.xlabel(\"Time\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 多层RNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2, 5, 100)\n",
      "(2, 100)\n",
      "(2, 100)\n",
      "(2, 100)\n"
     ]
    }
   ],
   "source": [
    "tf.reset_default_graph()\n",
    "\n",
    "n_inputs = 2\n",
    "n_steps = 5\n",
    "\n",
    "X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])\n",
    "\n",
    "n_neurons = 100\n",
    "n_layers = 3\n",
    "\n",
    "layers = [tf.nn.rnn_cell.BasicRNNCell(num_units=n_neurons)\n",
    "          for layer in range(n_layers)]\n",
    "multi_layer_cell = tf.nn.rnn_cell.MultiRNNCell(layers)\n",
    "outputs, states = tf.nn.dynamic_rnn(multi_layer_cell, X, dtype=tf.float32)\n",
    "\n",
    "X_batch = np.random.rand(2, n_steps, n_inputs)\n",
    "\n",
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "    outputs_val, states_val = sess.run([outputs, states], feed_dict={X: X_batch})\n",
    "    print(outputs_val.shape)\n",
    "    for state in states_val:\n",
    "        print(state.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2, 5, 100)\n",
      "(2, 20)\n",
      "(2, 50)\n",
      "(2, 100)\n"
     ]
    }
   ],
   "source": [
    "tf.reset_default_graph()\n",
    "n_inputs = 2\n",
    "n_steps = 5\n",
    "\n",
    "X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])\n",
    "\n",
    "n_layers = 3\n",
    "neurons=[20, 50, 100]\n",
    "layers = [tf.nn.rnn_cell.BasicRNNCell(num_units=neurons[layer])\n",
    "          for layer in range(n_layers)]\n",
    "multi_layer_cell = tf.nn.rnn_cell.MultiRNNCell(layers)\n",
    "outputs, states = tf.nn.dynamic_rnn(multi_layer_cell, X, dtype=tf.float32)\n",
    "\n",
    "X_batch = np.random.rand(2, n_steps, n_inputs)\n",
    "\n",
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "    outputs_val, states_val = sess.run([outputs, states], feed_dict={X: X_batch})\n",
    "    print(outputs_val.shape)\n",
    "    for state in states_val:\n",
    "        print(state.shape)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "py3.6-env",
   "language": "python",
   "name": "py3.6-env"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
